import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: MENG
 * Date: 2022-07-28
 * Time: 20:07
 */
public class Test {

    //第一道题目：10w个数据当中重复的数据删除掉
    public static void func1(int[] array) {
        Set<Integer> hSet = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            hSet.add(array[i]);

        }
        System.out.println(hSet);
    }

    //第2道题目：找到10w个数据中第一个重复的数据
    public static int func2(int[] array) {
        Set<Integer> hSet = new HashSet<>();
        for (int i = 0; i < array.length; i++) {
            if(!hSet.contains(array[i])){
                hSet.add(array[i]);
            }else{
                return array[i];
            }
        }
        return 1;

    }

    //第3题：统计10w数据中，每个数据出现的个数
    public static void func3(int[] array) {
        Map<Integer,Integer> mapHash = new HashMap();
        for (int i = 0; i < array.length ; i++) {
            int key = array[i];
            if(mapHash.get(key) == null){
                mapHash.put(key,1);
                //重复的元素第二次进来else
            }else{
                int val = mapHash.get(key);//每次获取一下次数
                mapHash.put(key,val+1);//并且+1，重复的数据就每次+1
            }
        }
        System.out.println(mapHash);
    }

    //三道题目
    public static void main5(String[] args) {
        //生成随机数
        int[] array = new int[10_000];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(5000);
        }
//        System.out.println(func2(array));
//        System.out.println(Arrays.toString(array));
        func3(array);

    }
    //TreeSet使用方法
    public static void main(String[] args) {
        Set<String> tSet = new TreeSet<>();
        tSet.add("a");
        tSet.add("b");
        tSet.add("c");
//        tSet.add(null);//不能添加null到Set当中。
        System.out.println(tSet);
//        System.out.println(tSet.toArray());//可以问一下

        Iterator<String> it = tSet.iterator();
        while(it.hasNext()){
            System.out.println(it.next()+ " ");
        }
    }

    //HashMap的相关方法
    public static void main3(String[] args) {
        Map<String, Integer> hMap = new HashMap<>();
        hMap.put("a",10);//put是无序的
        hMap.put("b",8);
        hMap.put("c",18);
        hMap.put(null,null);//因为没有实现SortedMap接口，所以HashMap中的key和val都可以放null
        hMap.put(null,88);//覆盖上面的null
        System.out.println(hMap);
/*        System.out.println(hMap.containsKey("a"));//检测key是否包含在Map中，返回true、false
        System.out.println(hMap.containsValue(10));//检测val是否包含在Map中，返回true、false*/
    }


    //TreeMap的相关方法
    public static void main2(String[] args) {
        Map<String, Integer> map = new TreeMap();
        map.put("a",10);
        map.put("b",30);
        map.put("c",8);
        map.put("c",18);//key一样的时候，替换掉上面的8
        //System.out.println(map);
//        map.put(null,58);//TreeMap中的key不能放null,因为实现了SortedMap接口
       /* System.out.println(map);
        System.out.println(map.get("a"));//返回10
        System.out.println(map.get("abc"));//返回null
        System.out.println(map.getOrDefault("abcd",100));//key中没有abcd，那就给他value赋值100*/

/*        Set<String> setKey = map.keySet();//将所有的key值集合起来
        System.out.println(setKey);*/

/*        Collection<Integer> collectVal = map.values();//将所有的value值集合起来
        System.out.println(collectVal);*/

       /* Set<Map.Entry<String,Integer>> entrySet = map.entrySet();//key和val的集合
        for (Map.Entry<String,Integer> entry : entrySet) {
            System.out.println("key:" +entry.getKey()+ " val:" +entry.getValue());
        }*/
    }

    //验证搜索树
    public static void main1(String[] args) {
        BinarySearchTree binarySearchTree = new BinarySearchTree();
        int[] array = {80,30,48,60,90,56};
        for (int i = 0; i < array.length; i++) {
            binarySearchTree.insert(array[i]);
        }
        binarySearchTree.inorder(binarySearchTree.root);
        binarySearchTree.remove(56);
        System.out.println();
        binarySearchTree.inorder(binarySearchTree.root);
    }
}